home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TPUG - Toronto PET Users Group
/
TPUG Users Group CD
/
TPUG Users Group CD.iso
/
COMAL
/
B-Book Series
/
(k)b6.d64
/
play.l
< prev
next >
Wrap
Text File
|
2007-02-28
|
2KB
|
87 lines
9000 PROC PLAY(MUSIC$,TEMPO) CLOSED
9010 SID:=54272; POINTER:=0; END'OF'NOTES:=LEN(MUSIC$)
9020 REPEAT
9030 POINTER:+1
9040 CASE MUSIC$(POINTER) OF
9050 WHEN "C"
9060 IF MUSIC$(POINTER+1)="#" THEN
9070 FREQ:=36376; POINTER:+1
9080 ELSE
9090 FREQ:=34334
9100 ENDIF
9110 WHEN "D"
9120 IF MUSIC$(POINTER+1)="#" THEN
9130 FREQ:=40830; POINTER:+1
9140 ELSE
9150 FREQ:=38539
9160 ENDIF
9170 WHEN "E"
9180 FREQ:=43258
9190 WHEN "F"
9200 IF MUSIC$(POINTER+1)="#" THEN
9210 FREQ:=48556; POINTER:+1
9220 ELSE
9230 FREQ:=45830
9240 ENDIF
9250 WHEN "G"
9260 IF MUSIC$(POINTER+1)="#" THEN
9270 FREQ:=54502; POINTER:+1
9280 ELSE
9290 FREQ:=51443
9300 ENDIF
9310 WHEN "A"
9320 IF MUSIC$(POINTER+1)="#" THEN
9330 FREQ:=61176; POINTER:+1
9340 ELSE
9350 FREQ:=57743
9360 ENDIF
9370 WHEN "B"
9380 FREQ:=64814
9390 WHEN "R"
9400 FREQ:=0
9410 OTHERWISE
9420 PRINT "'",MUSIC$(POINTER),"' IS NOT A VALID NOTE"
9430 CLOSE
9440 END
9450 ENDCASE
9460 POINTER:+1
9470 IF MUSIC$(POINTER)<>"-" THEN
9480 PRINT "'-' IS NEEDED TO SEPERATE NOTE AND OCTAVE"
9490 CLOSE
9500 END
9510 ENDIF
9520 POINTER:+1
9530 OCTAVE:=ORD(MUSIC$(POINTER))-ORD("0")
9540 IF OCTAVE<0 OR OCTAVE>7 THEN
9550 PRINT "OCTAVE RANGE IS 0-7 ONLY"
9560 CLOSE
9570 END
9580 ENDIF
9590 FREQ:=FREQ DIV 2^OCTAVE
9600 POKE SID,FREQ MOD 256
9610 POKE SID+1,FREQ DIV 256
9620 TEMP:=(PEEK(1023) DIV 2)*2+1
9630 POKE SID+4,TEMP
9640 POKE 1023,TEMP
9650 POINTER:+1
9660 IF MUSIC$(POINTER)<>":" THEN
9670 PRINT "':' IS NEEDED TO SEPARATE OCAVE AND DURATION"
9680 CLOSE
9690 END
9700 ENDIF
9710 POINTER:+1
9720 DUR:=ORD(MUSIC$(POINTER))-ORD("0")
9730 POINTER:+1
9740 IF POINTER<=END'OF'NOTES THEN
9750 IF MUSIC$(POINTER)>="0" AND MUSIC$(POINTER)<="9" THEN
9760 DUR:=DUR*10+ORD(MUSIC$(POINTER))-ORD("0")
9770 POINTER:+1
9780 ENDIF
9790 ENDIF
9800 FOR T:=0 TO TEMPO DIV DUR DO NULL
9810 TEMP:=(PEEK(1023) DIV 2)*2
9820 POKE 54272+4,TEMP
9830 POKE 1023,TEMP
9840 UNTIL POINTER>END'OF'NOTES
9850 ENDPROC PLAY